# -*- coding: utf-8 -*-
"""
@Project ：weather 
@File    ：quotes.py
@Author: guzain
@Date:  2025/7/7 11:35:28
@Email： GZA5210@163.com
@Description: 
"""
import requests
import json
import random
import os
from datetime import datetime

from config.config import TIANAPI_KEY, USE_NETWORK_ENGLISH, USE_NETWORK_WYY
from utils.log_config import logger

# 配置文件路径
QUOTES_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "quotes")
JSON_PATH = os.path.join(QUOTES_DIR, "quotes.json")

# 确保目录存在
def ensure_quotes_dir():
    if not os.path.exists(QUOTES_DIR):
        os.makedirs(QUOTES_DIR)
        logger.info(f"创建文案存储目录: {QUOTES_DIR}")

# 初始化存储文件
def init_storage():
    ensure_quotes_dir()
    # 创建空的JSON文件如果不存在
    if not os.path.exists(JSON_PATH):
        with open(JSON_PATH, 'w', encoding='utf-8') as f:
            json.dump({
                "love_quotes": [],
                "daily_english": [],
                "wyy_comments": []
            }, f, ensure_ascii=False, indent=2)
        logger.info(f"创建空的JSON存储文件: {JSON_PATH}")

# 从JSON文件读取文案
def read_local_quotes():
    init_storage()
    try:
        with open(JSON_PATH, 'r', encoding='utf-8') as f:
            return json.load(f)
    except Exception as e:
        logger.error(f"读取本地文案失败: {e}")
        return {
            "love_quotes": [],
            "daily_english": [],
            "wyy_comments": []
        }

# 保存文案到JSON文件
def save_to_json(quote_type, data):
    init_storage()
    quotes = read_local_quotes()
    
    if quote_type == "love":
        # 检查是否已存在
        if data not in quotes["love_quotes"]:
            quotes["love_quotes"].append(data)
            logger.info(f"添加新的爱情语录到JSON")
    elif quote_type == "daily_english":
        # 检查是否已存在（通过英文内容判断）
        if not any(item["en"] == data["en"] for item in quotes["daily_english"]):
            quotes["daily_english"].append(data)
            logger.info(f"添加新的每日英语到JSON")
    elif quote_type == "wyy":
        # 检查是否已存在（通过评论内容判断）
        if not any(item["content"] == data["content"] for item in quotes["wyy_comments"]):
            quotes["wyy_comments"].append(data)
            logger.info(f"添加新的网易云评论到JSON")
    
    try:
        with open(JSON_PATH, 'w', encoding='utf-8') as f:
            json.dump(quotes, f, ensure_ascii=False, indent=2)
        logger.info(f"文案已保存到JSON文件: {JSON_PATH}")
    except Exception as e:
        logger.error(f"保存文案到JSON失败: {e}")



# 从本地随机获取爱情语录
def get_local_love():
    quotes = read_local_quotes()
    if quotes["love_quotes"]:
        return random.choice(quotes["love_quotes"])
    return None

# 从本地随机获取每日英语
def get_local_daily_english():
    quotes = read_local_quotes()
    if quotes["daily_english"]:
        return random.choice(quotes["daily_english"])
    return None

# 从本地随机获取网易云评论
def get_local_wyy():
    quotes = read_local_quotes()
    if quotes["wyy_comments"]:
        return random.choice(quotes["wyy_comments"])
    return None

# 获取爱情语录
def Get_love(use_local=None):
    """
    获取爱情语录
    :param use_local: 是否使用本地文案，默认None（强制使用本地）
    :return: 爱情语录内容
    """
    try:
        # 只使用本地文案
        local_quote = get_local_love()
        if local_quote:
            logger.info("使用本地爱情语录")
            return local_quote
    except Exception as e:
        logger.error(f"获取本地爱情语录失败: {e}")
    return "爱的力量是无穷的"

# 获取每日励志语录/中英语
def Get_dailyEnglish(use_local=None):
    """
    获取每日励志语录（中英双语）
    :param use_local: 是否使用本地文案，默认None（使用配置文件设置）
    :return: (中文内容, 英文内容)
    """
    # 如果没有指定use_local，使用配置文件中的设置
    if use_local is None:
        use_local = not USE_NETWORK_ENGLISH
    
    try:
        # 如果使用本地文案且有本地数据，随机返回一条
        if use_local:
            local_quote = get_local_daily_english()
            if local_quote:
                logger.info("使用本地每日英语")
                return local_quote["zh"], local_quote["en"]
        
        # 在线获取
        url = 'https://apis.tianapi.com/enmaxim/index?key=' + TIANAPI_KEY
        dailyEnglis = requests.get(url).json()
        dailyEnglis_code = dailyEnglis.get("code")
        if dailyEnglis_code == 200:
            result = dailyEnglis.get("result", {})
            zh = result.get('zh', '')
            en = result.get('en', '')
            
            if zh and en:
                # 保存到本地
                save_to_json("daily_english", {"zh": zh, "en": en})
                logger.info("获取并保存新的每日英语")
                return zh, en
    except Exception as e:
        logger.error(f"获取每日英语失败: {e}")
        # 如果在线获取失败，尝试使用本地文案
        local_quote = get_local_daily_english()
        if local_quote:
            logger.info("在线获取失败，使用本地每日英语")
            return local_quote["zh"], local_quote["en"]
    return "每一天都是新的开始", "Every day is a new beginning"

# 获取网易云评论
def Get_wyy(use_local=None):
    """
    获取网易云热评
    :param use_local: 是否使用本地文案，默认None（使用配置文件设置）
    :return: (评论内容, 歌曲名称)
    """
    # 如果没有指定use_local，使用配置文件中的设置
    if use_local is None:
        use_local = not USE_NETWORK_WYY
    
    try:
        # 如果使用本地文案且有本地数据，随机返回一条
        if use_local:
            local_quote = get_local_wyy()
            if local_quote:
                logger.info("使用本地网易云评论")
                return local_quote["content"], local_quote["source"]
        
        # 在线获取
        wyy_url = f"http://api.tianapi.com/txapi/hotreview/index?key={TIANAPI_KEY}"
        wyy_json = requests.post(wyy_url).json()
        wyy_code = wyy_json.get("code")
        if wyy_code == 200:
            # 获取评论内容
            wyy_content = wyy_json.get("newslist", [{}])[0].get("content", "")
            # 获取歌名
            wyy_source = wyy_json.get("newslist", [{}])[0].get("source", "")
            
            if wyy_content:
                # 保存到本地
                save_to_json("wyy", {"content": wyy_content, "source": wyy_source})
                # 同时更新txt和excel
                logger.info("获取并保存新的网易云评论")
                return wyy_content, wyy_source
    except Exception as e:
        logger.error(f"获取网易云评论失败: {e}")
        # 如果在线获取失败，尝试使用本地文案
        local_quote = get_local_wyy()
        if local_quote:
            logger.info("在线获取失败，使用本地网易云评论")
            return local_quote["content"], local_quote["source"]
    return '音乐是心灵的解药', '未知歌曲'

# 初始化函数
def init_quotes():
    """
    初始化文案模块，创建必要的文件和目录
    """
    init_storage()
    logger.info("文案模块初始化完成")

# 如果直接运行此文件，进行测试
if __name__ == "__main__":
    init_quotes()
    
    # 测试获取和保存
    print("=== 测试在线获取文案 ===")
    love = Get_love()
    print(f"爱情语录: {love}")
    
    zh, en = Get_dailyEnglish()
    print(f"每日英语: {zh} / {en}")
    
    wyy_content, wyy_source = Get_wyy()
    print(f"网易云评论: {wyy_content} (来自: {wyy_source})")
    
    print("\n=== 测试本地文案 ===")
    love_local = Get_love(use_local=True)
    print(f"本地爱情语录: {love_local}")
    
    zh_local, en_local = Get_dailyEnglish(use_local=True)
    print(f"本地每日英语: {zh_local} / {en_local}")
    
    wyy_local, source_local = Get_wyy(use_local=True)
    print(f"本地网易云评论: {wyy_local} (来自: {source_local})")
    
    print(f"\n文案已保存到: {QUOTES_DIR}")
